package com.zenithmind.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.user.pojo.domain.User;
import com.zenithmind.user.pojo.domain.UserRole;
import com.zenithmind.user.pojo.dto.AdminLoginDTO;
import com.zenithmind.user.pojo.dto.LoginDTO;
import com.zenithmind.user.pojo.dto.RegisterDTO;
import com.zenithmind.user.pojo.dto.SimpleLoginDTO;
import com.zenithmind.user.pojo.dto.UserProfileUpdateDTO;
import com.zenithmind.user.pojo.query.UserQuery;
import com.zenithmind.user.pojo.vo.UserVO;
import com.zenithmind.common.result.PageResult;
import com.zenithmind.common.result.Result;

import java.util.List;

/**
 * 用户表(User)服务接口
 *
 * @author makejava
 * @since 2025-04-11 20:36:08
 */
public interface UserService extends IService<User> {

    Result<UserVO> login(LoginDTO loginDTO);

    /**
     * 简单登录（测试用，不需要验证码）
     *
     * @param simpleLoginDTO 简单登录DTO
     * @return 登录结果
     */
    Result<UserVO> simpleLogin(SimpleLoginDTO simpleLoginDTO);

    /**
     * 管理员登录
     *
     * @param adminLoginDTO 管理员登录DTO
     * @return 登录结果
     */
    Result<UserVO> adminLogin(AdminLoginDTO adminLoginDTO);

    Result<UserVO> register(RegisterDTO registerDTO);

    UserVO getCurrentUser();

    UserVO updateLoginUser(UserProfileUpdateDTO updateDTO);

    PageResult<UserVO> userPage(UserQuery userQuery);

    UserVO updateStatus(User user);

    UserVO updateRole(UserRole userRole);
    
    UserVO getUserById(String id);
    
    /**
     * 根据用户名获取用户信息
     * @param username 用户名
     * @return 用户信息
     */
    User getUserByUsername(String username);
    
    void resetPassword(User user);

    /**
     * 更新用户已用存储空间
     * @param userId 用户ID
     * @param fileSize 文件大小（增量，可以为负数）
     * @return 是否成功
     */
    boolean updateStorageUsed(String userId, long fileSize);

    void deleteBatch(List<String> ids);

    UserVO addOrUpdateUser(User user);
}
